package com.yuw.dz.fun;

public class TestDriver01 {
    public static void main(String[] args) {
        test01();
        System.out.println("=========================================================");
        test02();
        System.out.println("=========================================================");
        test03();
        System.out.println("=========================================================");
        test04();
        System.out.println("=========================================================");
        test05();
    }

    /**
     * 方法的重载
     */
    private static void test05() {
        // 由实参和形参的匹配决定调用那个重载方法
        //创建实例对象
        Student_Overload stu0 = new Student_Overload();
        // 调用重载方法
        stu0.doEating("煎饼",6.5f);
    }

    /**
     * 函数传值：按引用传参
     */
    private static void test04() {
        // 声明一个实例对象变量，并使用new进行初始化【实例化】【个体化】
        Person stu_zhangsan = new Person();
        // 临时变量
        int[] arr = new int[5]; // 实参  // 默认值为0

        System.out.println("子函数调用之前实参值arr：");
        printArr(arr);
        System.out.println("子函数调用执行开始");
        // 调用实例对象的行为方法
        stu_zhangsan.countSum(arr); // 调用子函数
        System.out.println("子函数调用执行结束");
        System.out.println("子函数调用之后实参值arr：");
        printArr(arr);
    }

    /**
     * 打印输出数组元素的值
     *
     * @param arr 被打印的数组
     */
    public static void printArr(int[] arr) {
        for (int i : arr) {
            System.out.print("    " + i);
        }
        // 换行
        System.out.println();
    }

    /**
     * 函数传值：按值传参
     */
    private static void test03() {
        // 声明一个实例对象变量，并使用new进行初始化【实例化】【个体化】
        Person stu_zhangsan = new Person();
        // 临时变量
        String foodName = "煎饼果子"; // 实参
        double money = 6.5; // 实参
        System.out.println("子函数调用之前实参值foodName：" + foodName + ",money:" + money);
        System.out.println("子函数调用执行开始");
        // 调用实例对象的行为方法
        stu_zhangsan.doEating(foodName, money);
        System.out.println("子函数调用执行结束");
        System.out.println("子函数调用之后实参值foodName：" + foodName + ",money:" + money);
    }

    /**
     * 函数的调用，带返回值
     */
    private static void test02() {
        // 声明一个实例对象变量，并使用new进行初始化【实例化】【个体化】
        Student stu_zhangsan = new Student();
        // 临时变量
        String examName = "数学"; // 实参
        // 调用实例对象的行为方法
        double myScore = stu_zhangsan.doExaming(examName); // 实参examName的值传递给函数声明时的形参
        System.out.println(examName + "考试得分：" + myScore);
    }

    /**
     * 函数的调用
     */
    private static void test01() {
        // 声明一个实例对象变量，并使用new进行初始化【实例化】【个体化】
        Student stu_zhangsan = new Student();
        // 调用实例对象的行为方法
        stu_zhangsan.doEating("煎饼果子", 6.5);
    }
}
